"""
一到多的查询
product.review_set
访问 “一” 对应的模型类对象的 “多” 对应的模型类名小写 _set 属性

多到一的查询
直接通过字段访问 review.product
"""
from product.models import Product, Review
from django.http import HttpResponse
from django.db.models import Count, Avg

# 获取产品及其所有的评论
def get_product_review(request):
    # 由一到多
    product = Product.objects.get(id=1)
    product.review_set.all() # 获取所有的评论
 
    # 点赞量大于1
    reviews = product.review_set.filter(link_count__gt=1)    

    # 由多到一 ID为1的评论
    review = Review.objects.get(id=1)
    product = review.product
    print(f"评论所属产品：{product.product_name}, 价格:{product.price}")



    # 表示通过 Product 模型的 product_name 字段进行查询，找到产品名称为指定值的所有评论。
    reviews= Review.objects.filter(product__product_name__contains="雷")
  

    # 聚合关联查询
    # 统计每个产品的评论数量 ， 计算每条评论的平均点赞，过滤出至少有一条评论的产品（不限制评论数就删除）， 按照产品的id降序排序
    products = Product.objects.annotate(
        review_count=Count('review'),
        avg_link_count = Avg('review__link_count')
    ).filter(review_count__gt=0).order_by('-id')
    for product in products:

        print(f"id:{product.id}  {product.product_name}, | 评论数: {product.review_count}条 ｜ 平均点赞: {product.avg_lik_count}")
    return HttpResponse("ok")